package main

import (
	"1985/stl_utils"
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"net/http"
	"time"
)

// 发送GET请求
// url：         请求地址
// response：    请求返回的内容
func Get(url string) string {

	// 超时时间：5秒
	client := &http.Client{Timeout: 5 * time.Second}
	resp, err := client.Get(url)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	var buffer [512]byte
	result := bytes.NewBuffer(nil)
	for {
		n, err := resp.Body.Read(buffer[0:])
		result.Write(buffer[0:n])
		if err != nil && err == io.EOF {
			break
		} else if err != nil {
			panic(err)
		}
	}

	return result.String()
}

// 发送POST请求
// url：         请求地址
// data：        POST请求提交的数据
// contentType： 请求体格式，如：application/json
// content：     请求放回的内容
func Post(url string, data interface{}, contentType string) string {

	// 超时时间：5秒
	client := &http.Client{Timeout: 5 * time.Second}
	jsonStr, _ := json.Marshal(data)
	resp, err := client.Post(url, contentType, bytes.NewBuffer(jsonStr))
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	result, _ := ioutil.ReadAll(resp.Body)
	return string(result)
}

type TEST_result struct {
	Name string `json:"name"`
	From string `json:"from"`
}

type TEST_RES struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Result  TEST_result `json:"result"`
}

func printfInfo(data string) {
	/*
	   {
	       code: 200,
	       message: "成功!",
	       result: {
	           name: "迟迟好景烟花媚，曲渚鸳鸯眠锦翅。",
	           from: "魏承班《木兰花·小芙蓉》"
	       }
	   }
	*/
	// var data string = `{ "code": 200, "message": "message", "result": { "name": "name", "from": "from" }}`

	log.Println("-----------------------------------------")
	log.Println(data)
	var s TEST_RES
	err := json.Unmarshal([]byte(data), &s)
	if err != nil {
		log.Println("-----------------------------------------#")
		log.Println(err)
		return
	}

	// // dataReader := bytes.NewBuffer([]byte(data))
	// dataReader := bytes.NewBufferString(data)
	// // dataReader := bytes.NewReader([]byte(data))
	// err := json.NewDecoder(dataReader).Decode(&s)
	// if err != nil {
	// 	log.Println("-----------------------------------------#")
	// 	log.Println(err)
	// 	return
	// }

	log.Println("-----------------------------------------")
	log.Println(s)
	log.Println("-----------------------------------------")
	log.Println(s.Result.Name)
	log.Println("-----------------------------------------")
	log.Println(s.Result.From)
	log.Println("-----------------------------------------")
}

type Person struct {
	Name    string
	Year    int  `json:"age"`
	Child   bool `json:"isChild,omitempty"`
	Parents []string
}

var persons = []Person{
	{Name: "Albma", Year: 2018, Child: true,
		Parents: []string{"Jonh", "Lucy"}},
	{Name: "Tom", Year: 1997, Child: false,
		Parents: []string{"Newman"}},
	{Name: "Bullitt", Year: 2008,
		Parents: []string{"Steve", "Jim"}},
}

func main1() {
	//编组
	data, err := json.Marshal(persons)
	if err != nil {
		log.Fatalf("JSON marshaling failed: %s", err)
	}
	log.Printf("%s\n", data)

}

func main() {
	flags := log.Flags()
	log.Println(flags)
	log.SetFlags(flags)
	md5 := stl_utils.STL_md5("123456")
	log.Println(md5)
	main1()
	//处理路由为 / 的方法
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// var res string = Get("http://ningbosrs.ss360.org:1985/")
		var res string = Get("http://poetry.apiopen.top/sentences")
		printfInfo(res)
		fmt.Fprintf(w, res)
	})
	//监听3000端口
	http.ListenAndServe(":1985", nil)
}
